Configurazione Cursor per sviluppo remoto su VPS
Configurazione Cursor per sviluppo remoto su VPS
> Guida completa per configurare Cursor per sviluppare direttamente sul VPS cPanel senza dover lavorare in locale.
---
1) Prerequisiti
Sul tuo Mac:
- ✅ Cursor installato
- ✅ Accesso SSH al VPS (IP, porta, username, password o chiave SSH)
- ✅ SSH abilitato e accessibile
- ✅ PHP 8.2+, Composer 2.7+, Node 20+ installati
- ✅ Laravel 11 pronto o da installare
- ✅ Permessi corretti sulla directory di lavoro (es.
~/public_html/sartup) - PHP Intelephense (per autocompletamento PHP)
- Laravel Blade Snippets (sintassi Blade)
- Laravel Extra Intellisense (autocompletamento route, view, config)
- Tailwind CSS IntelliSense (se usi Tailwind)
- ESLint (per JavaScript/Vue/React)
- GitLens (per Git integrato)
- Verifica firewall sul VPS (porta 22 aperta)
- Verifica che SSH sia attivo:
- Controlla il file
- Riconnetti con
- Verifica spazio disco sul VPS:
- ✅ Usa sempre chiavi SSH (non password)
- ✅ Non committare mai
- ✅ Mantieni credenziali DB sicure
- ✅ Configura fail2ban sul VPS per proteggere SSH
- ✅ Usa
- ✅ Compila asset con
- ✅ Abilita OPcache in PHP (di solito già attivo in cPanel)
- ✅ Lavora su branch feature (
- ✅ Fai commit piccoli e frequenti
- ✅ Testa prima di pushare su main/master
- ✅ Usa
- [ ] SSH configurato in
- [ ] Connessione SSH funzionante (
- [ ] Cursor si connette al VPS tramite Remote-SSH
- [ ] Workspace aperto su
- [ ] Estensioni PHP/Laravel installate sul server
- [ ] Terminale integrato funzionante
- [ ] File
- [ ] Database creato e migrato
- [ ] Permessi corretti su
- [ ]
Sul VPS:
---
2) Configurazione SSH locale (macOS)
Passo 1: Configura il file SSH config
Apri il terminale e modifica (o crea) il file ~/.ssh/config:
``bash
nano ~/.ssh/config
`
Aggiungi questa configurazione (sostituisci con i tuoi dati):
`ssh
Host sartup-vps
HostName xxx.xxx.xxx.xxx # IP del tuo VPS
User cpanel_username # Il tuo username cPanel/SSH
Port 22 # Porta SSH (di solito 22, verifica con il tuo provider)
IdentityFile ~/.ssh/id_rsa # Percorso alla tua chiave SSH privata
ServerAliveInterval 60 # Mantiene la connessione attiva
ServerAliveCountMax 3
ForwardAgent yes
`
Se usi password invece di chiave SSH, rimuovi la riga IdentityFile.
Passo 2: Genera chiave SSH (se non l'hai già)
Se non hai una chiave SSH o vuoi crearne una dedicata:
`bash
Genera nuova chiave
ssh-keygen -t ed25519 -C "tuo-email@example.com" -f ~/.ssh/sartup_vps
Copia la chiave pubblica sul VPS
ssh-copy-id -i ~/.ssh/sartup_vps.pub cpanel_username@xxx.xxx.xxx.xxx `Poi aggiorna
~/.ssh/config con:
`
IdentityFile ~/.ssh/sartup_vps
`Passo 3: Testa la connessione
`bash
ssh sartup-vps
`Se ti connetti senza errori, sei pronto! 🎉
---
3) Configurazione Cursor Remote SSH
Metodo 1: Via Command Palette (Consigliato)
1. Apri Cursor
2. Premi
Cmd + Shift + P (macOS) per aprire la Command Palette3. Cerca e seleziona:
`
Remote-SSH: Connect to Host...
`4. Seleziona
sartup-vps dalla lista (se hai configurato ~/.ssh/config)
OPPURE inserisci manualmente:
`
cpanel_username@xxx.xxx.xxx.xxx
`5. Si aprirà una nuova finestra di Cursor connessa al VPS
6. Apri la cartella remota:
-
Cmd + O → Open Folder
- Naviga a: /home/cpanel_username/public_html/sartup
- Clicca "OK"Metodo 2: Via Terminale Cursor
1. Apri il terminale integrato in Cursor (
Ctrl + backtick o Cmd + J)2. Connettiti al VPS:
`bash
ssh sartup-vps
`3. Una volta connesso, Cursor rileverà la connessione SSH e ti permetterà di aprire il workspace remoto
---
4) Installazione estensioni sul server remoto
Quando lavori in remoto, Cursor installa le estensioni sul VPS stesso. Assicurati di installare:
Estensioni essenziali per Laravel:
Cursor installerà automaticamente le estensioni sul server quando le attivi nella sidebar.
---
5) Configurazione workspace remoto
Crea o modifica
.vscode/settings.json nella root del progetto sul VPS:`json
{
"php.validate.executablePath": "/usr/bin/php",
"php.executablePath": "/usr/bin/php",
"intelephense.environment.phpVersion": "8.2.0",
"intelephense.files.exclude": [
"/node_modules/",
"/vendor//{Tests,tests}/"
],
"files.associations": {
"*.blade.php": "blade"
},
"emmet.includeLanguages": {
"blade": "html"
},
"blade.format.enable": true,
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"[php]": {
"editor.defaultFormatter": "bmewburn.vscode-intelephense-client"
},
"[blade]": {
"editor.defaultFormatter": "shufo.vscode-blade-formatter"
},
"terminal.integrated.defaultProfile.linux": "bash",
"terminal.integrated.cwd": "${workspaceFolder}"
}
`---
6) Workflow di sviluppo tipico
Primo setup sul VPS (da fare una volta):
`bash
Nel terminale Cursor remoto
cd ~/public_html/sartupSe il progetto non esiste ancora
git clone <repo-url> .Setup Laravel
composer install
cp .env.example .env
nano .env # Configura DB_*, APP_URL, ecc.
php artisan key:generate
php artisan migrate --seed
php artisan storage:link
chmod -R 775 storage bootstrap/cache
`Ciclo di sviluppo normale:
1. Modifica file in Cursor (i file sono salvati direttamente sul VPS)
2. Testa aprendo
https://sartup.it nel browser
3. Commit da Cursor stesso (Git integrato)
4. Push al repository remotoComandi utili nel terminale integrato:
`bash
Cache
php artisan config:clear
php artisan route:clear
php artisan view:clear
php artisan cache:clearMigrazioni
php artisan migrate
php artisan db:seedLogs
tail -f storage/logs/laravel.logAsset build (se usi Vite/Mix)
npm run build
`---
7) Vantaggi di questo approccio
✅ Editing diretto: Modifichi i file direttamente sul VPS, niente sync
✅ Test immediato: Salvi e ricarichi
https://sartup.it subito
✅ Ambiente identico: Sviluppi esattamente dove andrà in produzione
✅ No Docker: Approccio semplice, perfetto per cPanel
✅ Git integrato: Commit e push direttamente da Cursor
✅ Terminale SSH: Esegui artisan, composer, npm senza uscire da Cursor ---
8) Troubleshooting
Problema: "Permission denied (publickey)"
Soluzione: Verifica che la chiave SSH sia corretta o usa password:
`bash
ssh -v sartup-vps # Output verboso per debug
`Problema: "Could not establish connection to VPS"
Soluzione:
systemctl status sshd
~/.ssh/configProblema: "Extension host terminated unexpectedly"
Soluzione:
Cmd+Shift+P → Remote-SSH: Reconnect
df -hProblema: "Cannot find PHP executable"
Soluzione: Nel terminale SSH trova il percorso PHP:
`bash
which php # Es. /usr/bin/php o /opt/cpanel/ea-php82/root/usr/bin/php
`
Aggiorna il percorso in .vscode/settings.jsonProblema: Permessi negati su file
Soluzione:
`bash
Ripristina permessi corretti
cd ~/public_html/sartup
chmod -R 755 .
chmod -R 775 storage bootstrap/cache
chown -R cpanel_user:cpanel_user .
`---
9) Best practices
Sicurezza:
.env (è in .gitignore)
Performance:
php artisan config:cache in produzione
npm run build (non dev)
Git workflow:
git checkout -b feature/nome)
.gitignore per escludere node_modules, vendor, .env---
10) Comandi rapidi
Connessione rapida da terminale macOS:
`bash
ssh sartup-vps
cd ~/public_html/sartup
`Sincronizzazione file da locale a remoto (alternativa):
`bash
Se proprio devi sincronizzare da locale
rsync -avz --exclude 'node_modules' --exclude 'vendor' \
/path/locale/progetto/ \
sartup-vps:~/public_html/sartup/
`Backup rapido del DB:
`bash
ssh sartup-vps "mysqldump -u db_user -p db_name > ~/backup.sql"
scp sartup-vps:~/backup.sql ./backup_$(date +%Y%m%d).sql
`---
11) Checklist finale
Prima di iniziare lo sviluppo, verifica:
~/.ssh/config
ssh sartup-vps)
~/public_html/sartup
.env configurato sul VPS
storage/ e bootstrap/cache/
https://sartup.it accessibile e funzionante✅ Se tutti i check sono verdi, sei pronto a sviluppare!
---
Note aggiuntive
Compatibilità cPanel
cPanel spesso usa PHP gestito via ea-php82 o simili. Verifica quale versione è attiva:
`bash
php -v
which php
`Se hai più versioni PHP, puoi selezionare quella corretta in cPanel → "Select PHP Version".
Multi-environment
Puoi creare più configurazioni SSH per ambienti diversi:
`
Host sartup-dev
HostName xxx.xxx.xxx.xxx
User cpanel_user_dev
Host sartup-prod
HostName yyy.yyy.yyy.yyy
User cpanel_user_prod
``Poi scegli a quale connetterti in Cursor.
---
Happy coding! 🚀
Analisi Codice
Blocco 1 bash
nano ~/.ssh/config
Blocco 2 ssh
Host sartup-vps
HostName xxx.xxx.xxx.xxx # IP del tuo VPS
User cpanel_username # Il tuo username cPanel/SSH
Port 22 # Porta SSH (di solito 22, verifica con il tuo provider)
IdentityFile ~/.ssh/id_rsa # Percorso alla tua chiave SSH privata
ServerAliveInterval 60 # Mantiene la connessione attiva
ServerAliveCountMax 3
ForwardAgent yes
Blocco 3 bash
# Genera nuova chiave
ssh-keygen -t ed25519 -C "tuo-email@example.com" -f ~/.ssh/sartup_vps
# Copia la chiave pubblica sul VPS
ssh-copy-id -i ~/.ssh/sartup_vps.pub cpanel_username@xxx.xxx.xxx.xxx
Blocco 4
IdentityFile ~/.ssh/sartup_vps
Blocco 5 bash
ssh sartup-vps
Blocco 6
Remote-SSH: Connect to Host...
Blocco 7
cpanel_username@xxx.xxx.xxx.xxx
Blocco 8 bash
ssh sartup-vps
Blocco 9 json
{
"php.validate.executablePath": "/usr/bin/php",
"php.executablePath": "/usr/bin/php",
"intelephense.environment.phpVersion": "8.2.0",
"intelephense.files.exclude": [
"**/node_modules/**",
"**/vendor/**/{Tests,tests}/**"
],
"files.associations": {
"*.blade.php": "blade"
},
"emmet.includeLanguages": {
"blade": "html"
},
"blade.format.enable": true,
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"[php]": {
"editor.defaultFormatter": "bmewburn.vscode-intelephense-client"
},
"[blade]": {
"editor.defaultFormatter": "shufo.vscode-blade-formatter"
},
"terminal.integrated.defaultProfile.linux": "bash",
"terminal.integrated.cwd": "${workspaceFolder}"
}
Blocco 10 bash
# Nel terminale Cursor remoto
cd ~/public_html/sartup
# Se il progetto non esiste ancora
git clone <repo-url> .
# Setup Laravel
composer install
cp .env.example .env
nano .env # Configura DB_*, APP_URL, ecc.
php artisan key:generate
php artisan migrate --seed
php artisan storage:link
chmod -R 775 storage bootstrap/cache
Blocco 11 bash
# Cache
php artisan config:clear
php artisan route:clear
php artisan view:clear
php artisan cache:clear
# Migrazioni
php artisan migrate
php artisan db:seed
# Logs
tail -f storage/logs/laravel.log
# Asset build (se usi Vite/Mix)
npm run build
Blocco 12 bash
ssh -v sartup-vps # Output verboso per debug
Blocco 13 bash
which php # Es. /usr/bin/php o /opt/cpanel/ea-php82/root/usr/bin/php
Blocco 14 bash
# Ripristina permessi corretti
cd ~/public_html/sartup
chmod -R 755 .
chmod -R 775 storage bootstrap/cache
chown -R cpanel_user:cpanel_user .
Blocco 15 bash
ssh sartup-vps
cd ~/public_html/sartup
Blocco 16 bash
# Se proprio devi sincronizzare da locale
rsync -avz --exclude 'node_modules' --exclude 'vendor' \
/path/locale/progetto/ \
sartup-vps:~/public_html/sartup/
Blocco 17 bash
ssh sartup-vps "mysqldump -u db_user -p db_name > ~/backup.sql"
scp sartup-vps:~/backup.sql ./backup_$(date +%Y%m%d).sql
Blocco 18 bash
php -v
which php
Blocco 19
Host sartup-dev
HostName xxx.xxx.xxx.xxx
User cpanel_user_dev
Host sartup-prod
HostName yyy.yyy.yyy.yyy
User cpanel_user_prod